home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / FROMUTS / CDUNGEON / !CDUNGEON / c / SVERBS < prev    next >
Text File  |  1991-05-20  |  18KB  |  872 lines

  1. /* SVERBS-    SIMPLE VERBS PROCESSOR */
  2. /*     ALL VERBS IN THIS ROUTINE MUST BE INDEPENDANT */
  3. /*     OF OBJECT ACTIONS */
  4.  
  5. /*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
  6. /* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
  7. /* WRITTEN BY R. M. SUPNIK */
  8.  
  9. #include <stdio.h>
  10. #include "funcs.h"
  11. #include "vars.h"
  12.  
  13. logical sverbs_(ri)
  14. integer ri;
  15. {
  16.     /* Initialized data */
  17.  
  18.     const integer mxnop = 39;
  19.     const integer mxjoke = 64;
  20.     static const integer jokes[25] = { 4,5,3,304,305,306,307,308,309,310,311,
  21.         312,313,5314,5319,324,325,883,884,120,120,0,0,0,0 };
  22.     static const integer answer[14] = { 0,1,2,3,4,4,4,4,5,5,5,6,7,7};
  23.     static const char * const ansstr[14] =
  24.         { "TEMPLE", "FOREST", "30003", "FLASK", "RUB", "FONDLE",
  25.           "CARRES", "TOUCH", "BONES", "BODY", "SKELE", "RUSTYKNIFE",
  26.           "NONE", "NOWHER" };
  27.  
  28.     /* System generated locals */
  29.     integer i__1, i__2;
  30.     logical ret_val;
  31.  
  32.     /* Local variables */
  33.     logical f;
  34.     const char *z, *z2;
  35.     integer i, j;
  36.     integer k;
  37.     integer l;
  38.     char ch[1*6];
  39.     integer cp, wp;
  40.     char pp1[1*6], pp2[1*6];
  41.     integer odi2 = 0, odo2 = 0;
  42.  
  43.     ret_val = TRUE_;
  44. /*                         !ASSUME WINS. */
  45.     if (prsvec_1.prso != 0) {
  46.     odo2 = objcts_1.odesc2[prsvec_1.prso - 1];
  47.     }
  48. /*                         !SET UP DESCRIPTORS. */
  49.     if (prsvec_1.prsi != 0) {
  50.     odi2 = objcts_1.odesc2[prsvec_1.prsi - 1];
  51.     }
  52.  
  53.     if (ri == 0) {
  54.     bug_(7, ri);
  55.     }
  56. /*                         !ZERO IS VERBOTEN. */
  57.     if (ri <= mxnop) {
  58.     return ret_val;
  59.     }
  60. /*                         !NOP? */
  61.     if (ri <= mxjoke) {
  62.     goto L100;
  63.     }
  64. /*                         !JOKE? */
  65.     switch (ri - mxjoke) {
  66.     case 1:  goto L65000;
  67.     case 2:  goto L66000;
  68.     case 3:  goto L67000;
  69.     case 4:  goto L68000;
  70.     case 5:  goto L69000;
  71.     case 6:  goto L1000;
  72.     case 7:  goto L2000;
  73.     case 8:  goto L3000;
  74.     case 9:  goto L4000;
  75.     case 10:  goto L5000;
  76.     case 11:  goto L6000;
  77.     case 12:  goto L7000;
  78.     case 13:  goto L8000;
  79.     case 14:  goto L9000;
  80.     case 15:  goto L10000;
  81.     case 16:  goto L11000;
  82.     case 17:  goto L12000;
  83.     case 18:  goto L13000;
  84.     case 19:  goto L14000;
  85.     case 20:  goto L15000;
  86.     case 21:  goto L16000;
  87.     case 22:  goto L17000;
  88.     case 23:  goto L18000;
  89.     case 24:  goto L19000;
  90.     case 25:  goto L20000;
  91.     case 26:  goto L21000;
  92.     case 27:  goto L22000;
  93.     case 28:  goto L23000;
  94.     case 29:  goto L24000;
  95.     case 30:  goto L25000;
  96.     case 31:  goto L26000;
  97.     case 32:  goto L27000;
  98.     }
  99.     bug_(7, ri);
  100.  
  101. /* ALL VERB PROCESSORS RETURN HERE TO DECLARE FAILURE. */
  102.  
  103. /* L10: */
  104.     ret_val = FALSE_;
  105. /*                         !LOSE. */
  106.     return ret_val;
  107.  
  108. /* JOKE PROCESSOR. */
  109. /* FIND PROPER ENTRY IN JOKES, USE IT TO SELECT STRING TO PRINT. */
  110.  
  111. L100:
  112.     i = jokes[ri - mxnop - 1];
  113. /*                         !GET TABLE ENTRY. */
  114.     j = i / 1000;
  115. /*                         !ISOLATE # STRINGS. */
  116.     if (j != 0) {
  117.     i = i % 1000 + rnd_(j);
  118.     }
  119. /*                         !IF RANDOM, CHOOSE. */
  120.     rspeak_(i);
  121. /*                         !PRINT JOKE. */
  122.     return ret_val;
  123. /* SVERBS, PAGE 2A */
  124.  
  125. /* V65--    ROOM */
  126.  
  127. L65000:
  128.     ret_val = rmdesc_(2);
  129. /*                         !DESCRIBE ROOM ONLY. */
  130.     return ret_val;
  131.  
  132. /* V66--    OBJECTS */
  133.  
  134. L66000:
  135.     ret_val = rmdesc_(1);
  136. /*                         !DESCRIBE OBJ ONLY. */
  137.     if (! play_1.telflg) {
  138.     rspeak_(138);
  139.     }
  140. /*                         !NO OBJECTS. */
  141.     return ret_val;
  142.  
  143. /* V67--    RNAME */
  144.  
  145. L67000:
  146.     i__1 = rooms_1.rdesc2[play_1.here - 1];
  147.     rspeak_(i__1);
  148. /*                         !SHORT ROOM NAME. */
  149.     return ret_val;
  150.  
  151. /* V68--    RESERVED */
  152.  
  153. L68000:
  154.     return ret_val;
  155.  
  156. /* V69--    RESERVED */
  157.  
  158. L69000:
  159.     return ret_val;
  160. /* SVERBS, PAGE 3 */
  161.  
  162. /* V70--    BRIEF.  SET FLAG. */
  163.  
  164. L1000:
  165.     findex_1.brieff = TRUE_;
  166. /*                         !BRIEF DESCRIPTIONS. */
  167.     findex_1.superf = FALSE_;
  168.     rspeak_(326);
  169.     return ret_val;
  170.  
  171. /* V71--    VERBOSE.  CLEAR FLAGS. */
  172.  
  173. L2000:
  174.     findex_1.brieff = FALSE_;
  175. /*                         !LONG DESCRIPTIONS. */
  176.     findex_1.superf = FALSE_;
  177.     rspeak_(327);
  178.     return ret_val;
  179.  
  180. /* V72--    SUPERBRIEF.  SET FLAG. */
  181.  
  182. L3000:
  183.     findex_1.superf = TRUE_;
  184.     rspeak_(328);
  185.     return ret_val;
  186.  
  187. /* V73-- STAY (USED IN ENDGAME). */
  188.  
  189. L4000:
  190.     if (play_1.winner != aindex_1.amastr) {
  191.     goto L4100;
  192.     }
  193. /*                         !TELL MASTER, STAY. */
  194.     rspeak_(781);
  195. /*                         !HE DOES. */
  196.     cevent_1.ctick[cindex_1.cevfol - 1] = 0;
  197. /*                         !NOT FOLLOWING. */
  198.     return ret_val;
  199.  
  200. L4100:
  201.     if (play_1.winner == aindex_1.player) {
  202.     rspeak_(664);
  203.     }
  204. /*                         !JOKE. */
  205.     return ret_val;
  206.  
  207. /* V74--    VERSION.  PRINT INFO. */
  208.  
  209. L5000:
  210.     more_output(NULL);
  211.     printf("V%1d.%1d%c\n", vers_1.vmaj, vers_1.vmin, vers_1.vedit);
  212.     play_1.telflg = TRUE_;
  213.     return ret_val;
  214.  
  215. /* V75--    SWIM.  ALWAYS A JOKE. */
  216.  
  217. L6000:
  218.     i = 330;
  219. /*                         !ASSUME WATER. */
  220.     if ((rooms_1.rflag[play_1.here - 1] & RWATER + RFILL) == 
  221.         0) {
  222.     i = rnd_(3) + 331;
  223.     }
  224.     rspeak_(i);
  225.     return ret_val;
  226.  
  227. /* V76--    GERONIMO.  IF IN BARREL, FATAL, ELSE JOKE. */
  228.  
  229. L7000:
  230.     if (play_1.here == rindex_1.mbarr) {
  231.     goto L7100;
  232.     }
  233. /*                         !IN BARREL? */
  234.     rspeak_(334);
  235. /*                         !NO, JOKE. */
  236.     return ret_val;
  237.  
  238. L7100:
  239.     jigsup_(335);
  240. /*                         !OVER FALLS. */
  241.     return ret_val;
  242.  
  243. /* V77--    SINBAD ET AL.  CHASE CYCLOPS, ELSE JOKE. */
  244.  
  245. L8000:
  246.     if (play_1.here == rindex_1.mcycl && qhere_(oindex_1.cyclo, play_1.here)
  247.         ) {
  248.     goto L8100;
  249.     }
  250.     rspeak_(336);
  251. /*                         !NOT HERE, JOKE. */
  252.     return ret_val;
  253.  
  254. L8100:
  255.     newsta_(oindex_1.cyclo, 337, 0, 0, 0);
  256. /*                         !CYCLOPS FLEES. */
  257.     findex_1.cyclof = TRUE_;
  258. /*                         !SET ALL FLAGS. */
  259.     findex_1.magicf = TRUE_;
  260.     objcts_1.oflag2[oindex_1.cyclo - 1] &= ~ FITEBT;
  261.     return ret_val;
  262.  
  263. /* V78--    WELL.  OPEN DOOR, ELSE JOKE. */
  264.  
  265. L9000:
  266.     if (findex_1.riddlf || play_1.here != rindex_1.riddl) {
  267.     goto L9100;
  268.     }
  269. /*                         !IN RIDDLE ROOM? */
  270.     findex_1.riddlf = TRUE_;
  271. /*                         !YES, SOLVED IT. */
  272.     rspeak_(338);
  273.     return ret_val;
  274.  
  275. L9100:
  276.     rspeak_(339);
  277. /*                         !WELL, WHAT? */
  278.     return ret_val;
  279.  
  280. /* V79--    PRAY.  IF IN TEMP2, POOF */
  281. /*                         ! */
  282.  
  283. L10000:
  284.     if (play_1.here != rindex_1.temp2) {
  285.     goto L10050;
  286.     }
  287. /*                         !IN TEMPLE? */
  288.     if (moveto_(rindex_1.fore1, play_1.winner)) {
  289.     goto L10100;
  290.     }
  291. /*                         !FORE1 STILL THERE? */
  292. L10050:
  293.     rspeak_(340);
  294. /*                         !JOKE. */
  295.     return ret_val;
  296.  
  297. L10100:
  298.     f = rmdesc_(3);
  299. /*                         !MOVED, DESCRIBE. */
  300.     return ret_val;
  301.  
  302. /* V80--    TREASURE.  IF IN TEMP1, POOF */
  303. /*                         ! */
  304.  
  305. L11000:
  306.     if (play_1.here != rindex_1.temp1) {
  307.     goto L11050;
  308.     }
  309. /*                         !IN TEMPLE? */
  310.     if (moveto_(rindex_1.treas, play_1.winner)) {
  311.     goto L10100;
  312.     }
  313. /*                         !TREASURE ROOM THERE? */
  314. L11050:
  315.     rspeak_(341);
  316. /*                         !NOTHING HAPPENS. */
  317.     return ret_val;
  318.  
  319. /* V81--    TEMPLE.  IF IN TREAS, POOF */
  320. /*                         ! */
  321.  
  322. L12000:
  323.     if (play_1.here != rindex_1.treas) {
  324.     goto L12050;
  325.     }
  326. /*                         !IN TREASURE? */
  327.     if (moveto_(rindex_1.temp1, play_1.winner)) {
  328.     goto L10100;
  329.     }
  330. /*                         !TEMP1 STILL THERE? */
  331. L12050:
  332.     rspeak_(341);
  333. /*                         !NOTHING HAPPENS. */
  334.     return ret_val;
  335.  
  336. /* V82--    BLAST.  USUALLY A JOKE. */
  337.  
  338. L13000:
  339.     i = 342;
  340. /*                         !DONT UNDERSTAND. */
  341.     if (prsvec_1.prso == oindex_1.safe) {
  342.     i = 252;
  343.     }
  344. /*                         !JOKE FOR SAFE. */
  345.     rspeak_(i);
  346.     return ret_val;
  347.  
  348. /* V83--    SCORE.  PRINT SCORE. */
  349.  
  350. L14000:
  351.     score_(0);
  352.     return ret_val;
  353.  
  354. /* V84--    QUIT.  FINISH OUT THE GAME. */
  355.  
  356. L15000:
  357.     score_(1);
  358. /*                         !TELLL SCORE. */
  359.     if (! yesno_(343, 0, 0)) {
  360.     return ret_val;
  361.     }
  362. /*                         !ASK FOR Y/N DECISION. */
  363.     exit_();
  364. /*                         !BYE. */
  365. /* SVERBS, PAGE 4 */
  366.  
  367. /* V85--    FOLLOW (USED IN ENDGAME) */
  368.  
  369. L16000:
  370.     if (play_1.winner != aindex_1.amastr) {
  371.     return ret_val;
  372.     }
  373. /*                         !TELL MASTER, FOLLOW. */
  374.     rspeak_(782);
  375.     cevent_1.ctick[cindex_1.cevfol - 1] = -1;
  376. /*                         !STARTS FOLLOWING. */
  377.     return ret_val;
  378.  
  379. /* V86--    WALK THROUGH */
  380.  
  381. L17000:
  382.     if (screen_1.scolrm == 0 || prsvec_1.prso != oindex_1.scol && (
  383.         prsvec_1.prso != oindex_1.wnort || play_1.here != rindex_1.bkbox))
  384.          {
  385.     goto L17100;
  386.     }
  387.     screen_1.scolac = screen_1.scolrm;
  388. /*                         !WALKED THRU SCOL. */
  389.     prsvec_1.prso = 0;
  390. /*                         !FAKE OUT FROMDR. */
  391.     cevent_1.ctick[cindex_1.cevscl - 1] = 6;
  392. /*                         !START ALARM. */
  393.     rspeak_(668);
  394. /*                         !DISORIENT HIM. */
  395.     f = moveto_(screen_1.scolrm, play_1.winner);
  396. /*                         !INTO ROOM. */
  397.     f = rmdesc_(3);
  398. /*                         !DESCRIBE. */
  399.     return ret_val;
  400.  
  401. L17100:
  402.     if (play_1.here != screen_1.scolac) {
  403.     goto L17300;
  404.     }
  405. /*                         !ON OTHER SIDE OF SCOL? */
  406.     for (i = 1; i <= 12; i += 3) {
  407. /*                         !WALK THRU PROPER WALL? */
  408.     if (screen_1.scolwl[i - 1] == play_1.here && screen_1.scolwl[i] == 
  409.         prsvec_1.prso) {
  410.         goto L17500;
  411.     }
  412. /* L17200: */
  413.     }
  414.  
  415. L17300:
  416.     if ((objcts_1.oflag1[prsvec_1.prso - 1] & TAKEBT) != 0) {
  417.     goto L17400;
  418.     }
  419.     i = 669;
  420. /*                         !NO, JOKE. */
  421.     if (prsvec_1.prso == oindex_1.scol) {
  422.     i = 670;
  423.     }
  424. /*                         !SPECIAL JOKE FOR SCOL. */
  425.     rspsub_(i, odo2);
  426.     return ret_val;
  427.  
  428. L17400:
  429.     i = 671;
  430. /*                         !JOKE. */
  431.     if (objcts_1.oroom[prsvec_1.prso - 1] != 0) {
  432.     i = rnd_(5) + 552;
  433.     }
  434. /*                         !SPECIAL JOKES IF CARRY. */
  435.     rspeak_(i);
  436.     return ret_val;
  437.  
  438. L17500:
  439.     prsvec_1.prso = screen_1.scolwl[i + 1];
  440. /*                         !THRU SCOL WALL... */
  441.     for (i = 1; i <= 8; i += 2) {
  442. /*                         !FIND MATCHING ROOM. */
  443.     if (prsvec_1.prso == screen_1.scoldr[i - 1]) {
  444.         screen_1.scolrm = screen_1.scoldr[i];
  445.     }
  446. /* L17600: */
  447.     }
  448. /*                         !DECLARE NEW SCOLRM. */
  449.     cevent_1.ctick[cindex_1.cevscl - 1] = 0;
  450. /*                         !CANCEL ALARM. */
  451.     rspeak_(668);
  452. /*                         !DISORIENT HIM. */
  453.     f = moveto_(rindex_1.bkbox, play_1.winner);
  454. /*                         !BACK IN BOX ROOM. */
  455.     f = rmdesc_(3);
  456.     return ret_val;
  457.  
  458. /* V87--    RING.  A JOKE. */
  459.  
  460. L18000:
  461.     i = 359;
  462. /*                         !CANT RING. */
  463.     if (prsvec_1.prso == oindex_1.bell) {
  464.     i = 360;
  465.     }
  466. /*                         !DING, DONG. */
  467.     rspeak_(i);
  468. /*                         !JOKE. */
  469.     return ret_val;
  470.  
  471. /* V88--    BRUSH.  JOKE WITH OBSCURE TRAP. */
  472.  
  473. L19000:
  474.     if (prsvec_1.prso == oindex_1.teeth) {
  475.     goto L19100;
  476.     }
  477. /*                         !BRUSH TEETH? */
  478.     rspeak_(362);
  479. /*                         !NO, JOKE. */
  480.     return ret_val;
  481.  
  482. L19100:
  483.     if (prsvec_1.prsi != 0) {
  484.     goto L19200;
  485.     }
  486. /*                         !WITH SOMETHING? */
  487.     rspeak_(363);
  488. /*                         !NO, JOKE. */
  489.     return ret_val;
  490.  
  491. L19200:
  492.     if (prsvec_1.prsi == oindex_1.putty && objcts_1.oadv[oindex_1.putty - 1] 
  493.         == play_1.winner) {
  494.     goto L19300;
  495.     }
  496.     rspsub_(364, odi2);
  497. /*                         !NO, JOKE. */
  498.     return ret_val;
  499.  
  500. L19300:
  501.     jigsup_(365);
  502. /*                         !YES, DEAD */
  503. /*                         ! */
  504. /*                         ! */
  505. /*                         ! */
  506. /*                         ! */
  507. /*                         ! */
  508.     return ret_val;
  509. /* SVERBS, PAGE 5 */
  510.  
  511. /* V89--    DIG.  UNLESS SHOVEL, A JOKE. */
  512.  
  513. L20000:
  514.     if (prsvec_1.prso == oindex_1.shove) {
  515.     return ret_val;
  516.     }
  517. /*                         !SHOVEL? */
  518.     i = 392;
  519. /*                         !ASSUME TOOL. */
  520.     if ((objcts_1.oflag1[prsvec_1.prso - 1] & TOOLBT) == 0) {
  521.     i = 393;
  522.     }
  523.     rspsub_(i, odo2);
  524.     return ret_val;
  525.  
  526. /* V90--    TIME.  PRINT OUT DURATION OF GAME. */
  527.  
  528. L21000:
  529.     gttime_(&k);
  530. /*                         !GET PLAY TIME. */
  531.     i = k / 60;
  532.     j = k % 60;
  533.  
  534.     more_output(NULL);
  535.     printf("You have been playing Dungeon for ");
  536.     if (i >= 1) {
  537.     printf("%d hour", i);
  538.     if (i >= 2)
  539.         printf("s");
  540.     printf(" and ");
  541.     }
  542.     printf("%d minute", j);
  543.     if (j != 1)
  544.     printf("s");
  545.     printf(".\n");
  546.     play_1.telflg = TRUE_;
  547.     return ret_val;
  548.  
  549.  
  550. /* V91--    LEAP.  USUALLY A JOKE, WITH A CATCH. */
  551.  
  552. L22000:
  553.     if (prsvec_1.prso == 0) {
  554.     goto L22200;
  555.     }
  556. /*                         !OVER SOMETHING? */
  557.     if (qhere_(prsvec_1.prso, play_1.here)) {
  558.     goto L22100;
  559.     }
  560. /*                         !HERE? */
  561.     rspeak_(447);
  562. /*                         !NO, JOKE. */
  563.     return ret_val;
  564.  
  565. L22100:
  566.     if ((objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT) == 0) {
  567.     goto L22300;
  568.     }
  569.     rspsub_(448, odo2);
  570. /*                         !CANT JUMP VILLAIN. */
  571.     return ret_val;
  572.  
  573. L22200:
  574.     if (! findxt_(xsrch_1.xdown, play_1.here)) {
  575.     goto L22300;
  576.     }
  577. /*                         !DOWN EXIT? */
  578.     if (curxt_1.xtype == xpars_1.xno || curxt_1.xtype == xpars_1.xcond && ! 
  579.         flags[*xflag - 1]) {
  580.     goto L22400;
  581.     }
  582. L22300:
  583.     i__1 = rnd_(5) + 314;
  584.     rspeak_(i__1);
  585. /*                         !WHEEEE */
  586. /*                         ! */
  587.     return ret_val;
  588.  
  589. L22400:
  590.     i__1 = rnd_(4) + 449;
  591.     jigsup_(i__1);
  592. /*                         !FATAL LEAP. */
  593.     return ret_val;
  594. /* SVERBS, PAGE 6 */
  595.  
  596. /* V92--    LOCK. */
  597.  
  598. L23000:
  599.     if (prsvec_1.prso == oindex_1.grate && play_1.here == rindex_1.mgrat) {
  600.     goto L23200;
  601.     }
  602. L23100:
  603.     rspeak_(464);
  604. /*                         !NOT LOCK GRATE. */
  605.     return ret_val;
  606.  
  607. L23200:
  608.     findex_1.grunlf = FALSE_;
  609. /*                         !GRATE NOW LOCKED. */
  610.     rspeak_(214);
  611.     exits_1.travel[rooms_1.rexit[play_1.here - 1]] = 214;
  612. /*                         !CHANGE EXIT STATUS. */
  613.     return ret_val;
  614.  
  615. /* V93--    UNLOCK */
  616.  
  617. L24000:
  618.     if (prsvec_1.prso != oindex_1.grate || play_1.here != rindex_1.mgrat) {
  619.     goto L23100;
  620.     }
  621.     if (prsvec_1.prsi == oindex_1.keys) {
  622.     goto L24200;
  623.     }
  624. /*                         !GOT KEYS? */
  625.     rspsub_(465, odi2);
  626. /*                         !NO, JOKE. */
  627.     return ret_val;
  628.  
  629. L24200:
  630.     findex_1.grunlf = TRUE_;
  631. /*                         !UNLOCK GRATE. */
  632.     rspeak_(217);
  633.     exits_1.travel[rooms_1.rexit[play_1.here - 1]] = 217;
  634. /*                         !CHANGE EXIT STATUS. */
  635.     return ret_val;
  636.  
  637. /* V94--    DIAGNOSE. */
  638.  
  639. L25000:
  640.     i = fights_(play_1.winner, 0);
  641. /*                         !GET FIGHTS STRENGTH. */
  642.     j = advs_1.astren[play_1.winner - 1];
  643. /*                         !GET HEALTH. */
  644. /* Computing MIN */
  645.     i__1 = i + j;
  646.     k = min(i__1,4);
  647. /*                         !GET STATE. */
  648.     if (! cevent_1.cflag[cindex_1.cevcur - 1]) {
  649.     j = 0;
  650.     }
  651. /*                         !IF NO WOUNDS. */
  652. /* Computing MIN */
  653.     i__1 = 4, i__2 = abs(j);
  654.     l = min(i__1,i__2);
  655. /*                         !SCALE. */
  656.     i__1 = l + 473;
  657.     rspeak_(i__1);
  658. /*                         !DESCRIBE HEALTH. */
  659.     i = (-j - 1) * 30 + cevent_1.ctick[cindex_1.cevcur - 1];
  660. /*                         !COMPUTE WAIT. */
  661.  
  662.     if (j != 0) {
  663.     more_output(NULL);
  664.     printf("You will be cured after %d moves.\n", i);
  665.     }
  666.  
  667.     i__1 = k + 478;
  668.     rspeak_(i__1);
  669. /*                         !HOW MUCH MORE? */
  670.     if (state_1.deaths != 0) {
  671.     i__1 = state_1.deaths + 482;
  672.     rspeak_(i__1);
  673.     }
  674. /*                         !HOW MANY DEATHS? */
  675.     return ret_val;
  676. /* SVERBS, PAGE 7 */
  677.  
  678. /* V95--    INCANT */
  679.  
  680. L26000:
  681.     for (i = 1; i <= 6; ++i) {
  682. /*                         !SET UP PARSE. */
  683.     pp1[i - 1] = ' ';
  684.     pp2[i - 1] = ' ';
  685. /* L26100: */
  686.     }
  687.     wp = 1;
  688. /*                         !WORD POINTER. */
  689.     cp = 1;
  690. /*                         !CHAR POINTER. */
  691.     if (prsvec_1.prscon <= 1) {
  692.     goto L26300;
  693.     }
  694.     for (z = input_1.inbuf + prsvec_1.prscon - 1; *z != '\0'; ++z) {
  695. /*                         !PARSE INPUT */
  696.     if (*z == ',')
  697.         goto L26300;
  698. /*                         !END OF PHRASE? */
  699.     if (*z != ' ')
  700.         goto L26150;
  701. /*                         !SPACE? */
  702.     if (cp != 1) {
  703.         ++wp;
  704.     }
  705.     cp = 1;
  706.     goto L26200;
  707. L26150:
  708.     if (wp == 1) {
  709.         pp1[cp - 1] = *z;
  710.     }
  711. /*                         !STUFF INTO HOLDER. */
  712.     if (wp == 2) {
  713.         pp2[cp - 1] = *z;
  714.     }
  715. /* Computing MIN */
  716.     i__2 = cp + 1;
  717.     cp = min(i__2,6);
  718. L26200:
  719.     ;
  720.     }
  721.  
  722. L26300:
  723.     prsvec_1.prscon = 1;
  724. /*                         !KILL REST OF LINE. */
  725.     if (pp1[0] != ' ') {
  726.     goto L26400;
  727.     }
  728. /*                         !ANY INPUT? */
  729.     rspeak_(856);
  730. /*                         !NO, HO HUM. */
  731.     return ret_val;
  732.  
  733. L26400:
  734.     encryp_(pp1, ch);
  735. /*                         !COMPUTE RESPONSE. */
  736.     if (pp2[0] != ' ') {
  737.     goto L26600;
  738.     }
  739. /*                         !TWO PHRASES? */
  740.  
  741.     if (findex_1.spellf) {
  742.     goto L26550;
  743.     }
  744. /*                         !HE'S TRYING TO LEARN. */
  745.     if ((rooms_1.rflag[rindex_1.tstrs - 1] & RSEEN) == 0) {
  746.     goto L26575;
  747.     }
  748.     findex_1.spellf = TRUE_;
  749. /*                         !TELL HIM. */
  750.     play_1.telflg = TRUE_;
  751.     more_output(NULL);
  752.     printf("A hollow voice replies:  \"%.6s %.6s\".\n", pp1, ch);
  753.  
  754.     return ret_val;
  755.  
  756. L26550:
  757.     rspeak_(857);
  758. /*                         !HE'S GOT ONE ALREADY. */
  759.     return ret_val;
  760.  
  761. L26575:
  762.     rspeak_(858);
  763. /*                         !HE'S NOT IN ENDGAME. */
  764.     return ret_val;
  765.  
  766. L26600:
  767.     if ((rooms_1.rflag[rindex_1.tstrs - 1] & RSEEN) != 0) {
  768.     goto L26800;
  769.     }
  770.     for (i = 1; i <= 6; ++i) {
  771.     if (pp2[i - 1] != ch[i - 1]) {
  772.         goto L26575;
  773.     }
  774. /*                         !WRONG. */
  775. /* L26700: */
  776.     }
  777.     findex_1.spellf = TRUE_;
  778. /*                         !IT WORKS. */
  779.     rspeak_(859);
  780.     cevent_1.ctick[cindex_1.cevste - 1] = 1;
  781. /*                         !FORCE START. */
  782.     return ret_val;
  783.  
  784. L26800:
  785.     rspeak_(855);
  786. /*                         !TOO LATE. */
  787.     return ret_val;
  788. /* SVERBS, PAGE 8 */
  789.  
  790. /* V96--    ANSWER */
  791.  
  792. L27000:
  793.     if (prsvec_1.prscon > 1 && play_1.here == rindex_1.fdoor && 
  794.         findex_1.inqstf) {
  795.     goto L27100;
  796.     }
  797.     rspeak_(799);
  798. /*                         !NO ONE LISTENS. */
  799.     prsvec_1.prscon = 1;
  800.     return ret_val;
  801.  
  802. L27100:
  803.     for (j = 1; j <= 14; j ++) {
  804. /*                         !CHECK ANSWERS. */
  805.     if (findex_1.quesno != answer[j - 1])
  806.         goto L27300;
  807. /*                         !ONLY CHECK PROPER ANS. */
  808.     z = ansstr[j - 1];
  809.     z2 = input_1.inbuf + prsvec_1.prscon - 1;
  810.     while (*z != '\0') {
  811.         while (*z2 == ' ')
  812.         z2++;
  813. /*                         !STRIP INPUT BLANKS. */
  814.         if (*z++ != *z2++)
  815.         goto L27300;
  816.     }
  817.     goto L27500;
  818. /*                         !RIGHT ANSWER. */
  819. L27300:
  820.     ;
  821.     }
  822.  
  823.     prsvec_1.prscon = 1;
  824. /*                         !KILL REST OF LINE. */
  825.     ++findex_1.nqatt;
  826. /*                         !WRONG, CRETIN. */
  827.     if (findex_1.nqatt >= 5) {
  828.     goto L27400;
  829.     }
  830. /*                         !TOO MANY WRONG? */
  831.     i__1 = findex_1.nqatt + 800;
  832.     rspeak_(i__1);
  833. /*                         !NO, TRY AGAIN. */
  834.     return ret_val;
  835.  
  836. L27400:
  837.     rspeak_(826);
  838. /*                         !ALL OVER. */
  839.     cevent_1.cflag[cindex_1.cevinq - 1] = FALSE_;
  840. /*                         !LOSE. */
  841.     return ret_val;
  842.  
  843. L27500:
  844.     prsvec_1.prscon = 1;
  845. /*                         !KILL REST OF LINE. */
  846.     ++findex_1.corrct;
  847. /*                         !GOT IT RIGHT. */
  848.     rspeak_(800);
  849. /*                         !HOORAY. */
  850.     if (findex_1.corrct >= 3) {
  851.     goto L27600;
  852.     }
  853. /*                         !WON TOTALLY? */
  854.     cevent_1.ctick[cindex_1.cevinq - 1] = 2;
  855. /*                         !NO, START AGAIN. */
  856.     findex_1.quesno = (findex_1.quesno + 3) % 8;
  857.     findex_1.nqatt = 0;
  858.     rspeak_(769);
  859. /*                         !ASK NEXT QUESTION. */
  860.     i__1 = findex_1.quesno + 770;
  861.     rspeak_(i__1);
  862.     return ret_val;
  863.  
  864. L27600:
  865.     rspeak_(827);
  866. /*                         !QUIZ OVER, */
  867.     cevent_1.cflag[cindex_1.cevinq - 1] = FALSE_;
  868.     objcts_1.oflag2[oindex_1.qdoor - 1] |= OPENBT;
  869.     return ret_val;
  870.  
  871. } /* sverbs_ */
  872.